package com.star.spring.ratelimit.model;

import lombok.Data;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * 访问日志数据模型
 * 
 * @author star
 * @since 2025-01-24
 */
@Data
public class AccessLog {

    /**
     * 请求ID（用于追踪）
     */
    private String requestId;

    /**
     * 访问时间
     */
    private LocalDateTime accessTime;

    /**
     * 请求方法
     */
    private String method;

    /**
     * 请求URI
     */
    private String uri;

    /**
     * 请求URL（完整）
     */
    private String url;

    /**
     * 客户端IP地址
     */
    private String clientIp;

    /**
     * 客户端真实IP（经过代理）
     */
    private String realIp;

    /**
     * 用户代理字符串
     */
    private String userAgent;

    /**
     * 浏览器信息
     */
    private String browser;

    /**
     * 操作系统信息
     */
    private String operatingSystem;

    /**
     * 设备信息
     */
    private String device;

    /**
     * 请求头信息
     */
    private Map<String, String> headers;

    /**
     * 请求参数
     */
    private Map<String, Object> requestParams;

    /**
     * 请求体
     */
    private Object requestBody;

    /**
     * 响应状态码
     */
    private Integer responseStatus;

    /**
     * 响应数据
     */
    private Object responseData;

    /**
     * 响应时间（毫秒）
     */
    private Long responseTime;

    /**
     * 异常信息
     */
    private String exception;

    /**
     * 限流状态
     */
    private Boolean rateLimited;

    /**
     * 限流类型
     */
    private String rateLimitType;

    /**
     * 限流key
     */
    private String rateLimitKey;

    /**
     * 会话ID
     */
    private String sessionId;

    /**
     * 用户ID（如果可获取）
     */
    private String userId;

    /**
     * 服务器信息
     */
    private String serverInfo;

    /**
     * 线程名称
     */
    private String threadName;

    /**
     * 内存使用情况
     */
    private Long memoryUsed;

    /**
     * CPU使用情况
     */
    private Double cpuUsage;
}
